package teacher

import "fmt"

// Department 表示一个部门的信息
type Department struct {
	ID          string `json:"id"`
	Name        string `json:"name"`
	Description string `json:"description"`
}

// Teacher 表示一个教师的信息
type Teacher struct {
	ID         string     `json:"id"`
	Name       string     `json:"name"`
	Age        int        `json:"age"`
	Gender     string     `json:"gender"`
	Department Department `json:"department"`
}

func (department Department) DepartmentPrinter() {
	fmt.Printf("Department ID: %s\n", department.ID)
	fmt.Printf("Department Name: %s\n", department.Name)
	fmt.Printf("Department Description: %s\n", department.Description)
}

func (teacher Teacher) TeacherPrinter() {
	fmt.Printf("Teacher ID: %s\n", teacher.ID)
	fmt.Printf("Teacher Name: %s\n", teacher.Name)
	fmt.Printf("Teacher Age: %d\n", teacher.Age)
	fmt.Printf("Teacher Gender: %s\n", teacher.Gender)
	teacher.Department.DepartmentPrinter()
}

// GetTeacherInformation 返回一个包含三个Teacher实例的数组。
// 该函数无需外部输入，直接返回预定义的Teacher数组。
// 每个Teacher实例包含详细信息，如ID、姓名、年龄、性别及所在部门信息。
// 部门信息包括部门ID、名称及描述。
func GetTeacherInformation() [3]Teacher {
	// 初始化一个包含三个Teacher结构的数组
	var teachers [3]Teacher

	// 定义并初始化第一个Teacher实例，详细信息包括ID、姓名、年龄、性别及部门信息
	teachers[0] = Teacher{
		ID:         "11",
		Name:       "Teacher Wang",
		Age:        30,
		Gender:     "Female",
		Department: Department{ID: "1101", Name: "Computer Science", Description: "Computer Science Department"},
	}

	// 定义并初始化第二个Teacher实例，详细信息包括ID、姓名、年龄、性别及部门信息
	teachers[1] = Teacher{
		ID:         "22",
		Name:       "Teacher Li",
		Age:        40,
		Gender:     "Man",
		Department: Department{ID: "1102", Name: "Math", Description: "Math Department"},
	}

	// 定义并初始化第三个Teacher实例，详细信息包括ID、姓名、年龄、性别及部门信息
	teachers[2] = Teacher{
		ID:         "33",
		Name:       "Teacher Liu",
		Age:        30,
		Gender:     "Female",
		Department: Department{ID: "1101", Name: "Computer Science", Description: "Computer Science Department"},
	}

	// 返回包含三个Teacher实例的数组
	return teachers
}

// TeacherInformationShow 显示教师信息。
// 该函数接受一个包含三个Teacher类型的数组作为参数。
// 通过遍历数组中的每个Teacher对象，调用其TeacherPrinter方法来打印教师信息。
// 这个函数没有返回值。
func TeacherInformationShow(teachers [3]Teacher) {
	for _, teacher := range teachers {
		teacher.TeacherPrinter()
	}
}

// UpdateTeacherAge 更新指定教师的年龄信息。
// 该函数遍历教师数组，寻找与给定教师ID匹配的教师对象，并更新其年龄。
// 参数:
//
//	teachers - 指向教师数组的指针，数组长度为3。
//	teacherID - 需要更新年龄的教师的ID。
//	newAge - 教师的新年龄。
func UpdateTeacherAge(teachers *[3]Teacher, teacherID string, newAge int) {
	// 遍历教师数组
	for i := range *teachers {
		// 检查当前教师的ID是否与需要更新年龄的教师ID匹配
		if (*teachers)[i].ID == teacherID {
			// 更新匹配教师的年龄
			(*teachers)[i].Age = newAge
			// 函数执行完毕后直接返回，避免不必要的额外遍历
			return
		}
	}
}
